package algorithm.leetcode.simple;

/**
 * 整数相关题目
 *
 * @author jack.wu
 * @version 1.0
 * @date 2020/8/17
 */
public class Question7 {

    /**
     * 给出一个 32 位的有符号整数，你需要将这个整数中每位上的数字进行反转。
     * 思路： 不断取个位数
     * @param x
     * @return
     */
    public int reverse(int x) {
        int res = 0;
        while (x != 0) {
            // 个位数
            int pop = x % 10;
            // 判断范围  Integer.MAX_VALUE 就是 2^32-1 这里 / 10 是因为下面要 * 10
            if (res > Integer.MAX_VALUE / 10 || (res == Integer.MAX_VALUE / 10 && pop > 7)) {
                return 0;
            }
            if (res < Integer.MIN_VALUE / 10 || (res == Integer.MIN_VALUE / 10 && pop < -8)) {
                return 0;
            }
            // 组装
            res = res * 10 + pop;
            x = x / 10;
        }
        return res;
    }

    public static void main(String[] args) {
        Question7 integerTest = new Question7();
        int reverse = integerTest.reverse(-128);
        System.out.println(reverse);
    }
}
